package br.com.vilababy.sigvb.mb.aluno;

import java.io.Serializable;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.event.AjaxBehaviorEvent;

import org.primefaces.model.LazyDataModel;
import org.primefaces.model.SortOrder;

import br.com.vilababy.sigvb.SIGVBUtil;
import br.com.vilababy.sigvb.constantes.SIGVBEnum;
import br.com.vilababy.sigvb.mb.AbstractAlunoMBean;
import br.com.vilababy.sigvb.modelo.Aluno;
import br.com.vilababy.sigvb.repository.AlunoRepository;

@ManagedBean
@ViewScoped
public class DadosPessoaisMBean extends AbstractAlunoMBean implements Serializable {

	/**
	 * @author Diego Patrick da Silva Santos
	 */
	private static final long serialVersionUID = 1L;

	//CONSTRUTOR
	public DadosPessoaisMBean() {
		setRepositoryAluno(new AlunoRepository());
		setMapaAlunos(new HashMap<Long, Aluno>());
	}
	
	@PostConstruct
	private void carregarAlunosPaginacao() {
		setAlunosPaginacao(new LazyDataModel<Aluno>() {

			private static final long serialVersionUID = 1L;
			
			@Override
			public List<Aluno> load(int primeiroRegistro, int totalRegistrosPagina,
					String sortField, SortOrder sortOrder, Map<String, Object> filtros) {
				
				setRowCount(((AlunoRepository) getRepositoryAluno()).totalAlunosFiltrados());
				
				setPageSize(totalRegistrosPagina);
				
				return ((AlunoRepository) getRepositoryAluno()).listarParcial(primeiroRegistro, totalRegistrosPagina);
			}
			
		});
		adicionarMapaAlunos();
	}
	
	//METODOS DE NEGOCIO
	
	public void adicionarAluno(AjaxBehaviorEvent evento) {
		try {
			this.setAluno(((AlunoRepository) getRepositoryAluno()).inserir(this.getAluno()));
			SIGVBUtil.adicionarMensagemSucesso(SIGVBUtil.getValorMensagem(SIGVBEnum.LABEL_CADASTRO.getValor()), SIGVBUtil.getValorMensagem(SIGVBEnum.CADASTRO_ALUNO_SUCESSO.getValor()));
			carregarAlunosPaginacao();
			limparTela();
		} catch (Exception ex) {
			SIGVBUtil.retornarMensagemErro(SIGVBUtil.getValorMensagem(SIGVBEnum.FALHA_CADASTRO.getValor()), SIGVBUtil.getValorMensagem(SIGVBEnum.FALHA_CADASTRO_ALUNO.getValor()));
		}
	}
	
	public void alterarAluno(AjaxBehaviorEvent evento) {
		try {
			((AlunoRepository) getRepositoryAluno()).atualizar(this.getAluno());
			SIGVBUtil.adicionarMensagemSucesso(SIGVBUtil.getValorMensagem(SIGVBEnum.LABEL_CADASTRO.getValor()), SIGVBUtil.getValorMensagem(SIGVBEnum.CADASTRO_ALUNO_SUCESSO.getValor()));
			carregarAlunosPaginacao();
			limparTela();
		} catch (Exception ex) {
			SIGVBUtil.retornarMensagemErro(SIGVBUtil.getValorMensagem(SIGVBEnum.FALHA_CADASTRO.getValor()), SIGVBUtil.getValorMensagem(SIGVBEnum.FALHA_CADASTRO_ALUNO.getValor()));
		}
		
	}
	
	@Override
	protected void limparTela() {
		this.setAluno(new Aluno());
		this.setAlunoSelecionado(new Aluno());
	}
	
}
